#!/usr/bin/env python
import os
from flask_migrate import Migrate
from app import create_app, db
from app.models import Admin, User, Department, Menu, Role, RoleMenu, RolePermission

app = create_app(os.getenv('FLASK_CONFIG') or 'default')
migrate = Migrate(app, db)

def create_admin():
    """创建默认管理员"""
    from werkzeug.security import generate_password_hash
    
    with app.app_context():
        # 创建默认角色
        admin_role = Role.query.filter_by(name='超级管理员').first()
        if not admin_role:
            admin_role = Role(
                name='超级管理员',
                description='系统超级管理员，拥有所有权限',
                data_scope='all',
                status=True
            )
            db.session.add(admin_role)
            db.session.commit()
        
        # 创建默认管理员
        admin = Admin.query.filter_by(username='admin').first()
        if not admin:
            admin = Admin(
                admin_name='系统管理员',
                username='admin',
                password_hash=generate_password_hash('123456'),
                role_id=admin_role.id,
                status=True
            )
            db.session.add(admin)
            db.session.commit()
            print('默认管理员创建成功: admin/123456')
        else:
            print('默认管理员已存在')

def init_menus():
    """初始化系统菜单"""
    with app.app_context():
        menus_data = [
            {'name': '系统管理', 'icon': 'setting', 'order_num': 1, 'path': '/system'},
            {'name': '管理员管理', 'icon': 'user', 'order_num': 2, 'path': '/system/admins', 'parent_name': '系统管理'},
            {'name': '部门管理', 'icon': 'team', 'order_num': 3, 'path': '/system/departments', 'parent_name': '系统管理'},
            {'name': '菜单管理', 'icon': 'menu', 'order_num': 4, 'path': '/system/menus', 'parent_name': '系统管理'},
            {'name': '角色权限', 'icon': 'safety', 'order_num': 5, 'path': '/system/roles', 'parent_name': '系统管理'},
            {'name': '用户管理', 'icon': 'user', 'order_num': 6, 'path': '/users'},
        ]
        
        for menu_data in menus_data:
            parent_id = None
            if 'parent_name' in menu_data:
                parent = Menu.query.filter_by(name=menu_data['parent_name']).first()
                if parent:
                    parent_id = parent.id
                del menu_data['parent_name']
            
            menu = Menu.query.filter_by(name=menu_data['name']).first()
            if not menu:
                menu = Menu(parent_id=parent_id, **menu_data)
                db.session.add(menu)
        
        db.session.commit()
        print('系统菜单初始化完成')

def init_db():
    """初始化数据库"""
    with app.app_context():
        db.create_all()
    create_admin()
    init_menus()
    print('数据库初始化完成')

if __name__ == '__main__':
    import sys
    if len(sys.argv) > 1:
        if sys.argv[1] == 'init_db':
            init_db()
        elif sys.argv[1] == 'create_admin':
            create_admin()
        elif sys.argv[1] == 'init_menus':
            init_menus()
    else:
        app.run(host='0.0.0.0', port=5000, debug=True) 